divisibility theory